package com.jshcbd.mvp_kt_demo.rxjava

import com.jshcbd.mvp_kt_demo.exception.ApiException
import com.jshcbd.mvp_kt_demo.http.ResultException
import io.reactivex.Observer
import io.reactivex.disposables.Disposable

abstract class BaseObserver<T> : Observer<T> {
    override fun onSubscribe(d: Disposable) {

    }

    override fun onNext(response: T) {
        onSuccess(response)
    }

    override fun onError(e: Throwable) {
        if (e is ResultException) {
            onFailure("${e.message}  错误码为：${e.code}")
        } else {
            val error: String = ApiException.handleException(e).message.toString()
            _onError(error)
        }
    }

    override fun onComplete() {}

    /**
     * 请求成功
     *
     * @param response 服务器返回的数据
     */
    abstract fun onSuccess(response: T)

    /**
     * 服务器返回数据，但code不在约定成功范围内
     *
     * @param msg 服务器返回的数据
     */
    abstract fun onFailure(msg: String?)
    private fun _onError(err: String) {
        onFailure(err)
    }
}